package org.objectsearch.web.tools;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @author Carlos
 * 
 */
public class Converter {

	/**
	 * convierte cadena a fecha.
	 * 
	 * @param dateVal
	 *            valor de fecha en formato de cadena
	 * @return fecha del sistema valida
	 * @throws ParseException
	 *             si la fecha no es convertible
	 */
	public static Date string2Date(String dateVal) throws ParseException {
		Date result = null;
		if (dateVal != null) {
			ObjectXmlConfigurationEnviroment enviroment = null;
			enviroment = ObjectXmlConfigurationEnviroment.getInstance();
			Properties props = enviroment.getApplicationProperties();
			String dateformat = null;
			if (props != null) {
				dateformat = props.getProperty("date.format");
			} else {
				dateformat = "dd/mm/yyyy";
			}
			Locale locale = Locale.getDefault();
			SimpleDateFormat formatter = new SimpleDateFormat(dateformat,
					locale);
			result = formatter.parse(dateVal);
		}
		return result;
	}

	/**
	 * convierte cadena a flotante.
	 * 
	 * @param fValue
	 *            valor de flotante en cadena.
	 * @return valor flotante de la conversion.
	 */
	public static Float string2Float(String fValue) {
		Float result = null;
		if (fValue != null && fValue.trim().length() > 0) {
			result = Float.valueOf(fValue);
		}
		return result;
	}

	/**
	 * convierte una cadena a entero.
	 * 
	 * @param iValue
	 *            valor de la cadena.
	 * @return valor de la cadena.
	 */
	public static Integer string2Integer(String iValue) {
		Integer result = null;
		if (iValue != null && iValue.trim().length() > 0) {
			result = Integer.valueOf(iValue);
		}
		return result;
	}

	/**
	 * convierte una cadena a un doble.
	 * 
	 * @param dValue
	 *            valor de cadena.
	 * @return doble resultado de la conversion.
	 */
	public static Double string2Double(String dValue) {
		Double result = null;
		if (dValue != null && dValue.trim().length() > 0) {
			result = Double.valueOf(dValue);
		}
		return result;
	}

	/**
	 * formatea una fecha para convertirla a cadena.
	 * 
	 * @param date
	 *            fecha convertida a cadena.
	 * @return formato de fecha para cadena.
	 */
	public static String formatDate(Date date) {
		if (date == null) {
			return "";
		}
		ObjectXmlConfigurationEnviroment enviroment = null;
		enviroment = ObjectXmlConfigurationEnviroment.getInstance();
		String dateFormat = null;
		try {
			dateFormat = enviroment.getApplicationProperties().getProperty(
					"date.format");
		} catch (Exception ex) {
		}
		if (dateFormat == null) {
			dateFormat = "dd/yy/mm";
		}
		// System.out.println(dateFormat);
		SimpleDateFormat formatter = null;
		Locale locale = Locale.getDefault();
		formatter = new SimpleDateFormat(dateFormat, locale);
		String result = formatter.format(date);
		return result;
	}

}
